/*
 * ReflectedSelectionListener.java - Nov 11, 2011
 * Copyright 2011 ZNetworks Group, All rights reserverd.
 * PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package com.andromeda.skadi.view.swing.listener;

import com.andromeda.lang.event.ReflectedListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
 * Facilita la implementacion de un escucha de eventos de seleccion.
 * @author Dickinson Arismendy ( droman@znetworksgroup.com )
 */
public class SkadiSelectionListener extends ReflectedListener implements ListSelectionListener {

    private boolean ignorigAdjustingEvents;

    /**
     * Constructor de la clase que establece por defecto como <tt>true</tt> el 
     * valor de la propiedad ignorigAdjustingEvents.
     */
    public SkadiSelectionListener(Object target, String methodName) {
        this(target, methodName, true);
    }

    /**
     * Constructior que permite establecer si se deben o no ignorar los eventos de ajuste de
     * seleccion.
     * @param target el objeto que contiene el metodo a llamar cuando ocurra el evento.
     * @param methodName el nombre del metodo a llamar al momento en que ocurra el evento.
     * @param ignoreAdjustingEvents true para ignorar los eventos de ajuste de seleccion.
     * @see ListSelectionEvent#getValueIsAdjusting()    
     */
    public SkadiSelectionListener(Object target, String methodName, boolean ignoreAdjustingEvents) {
        super(methodName, target);
        ignorigAdjustingEvents = ignoreAdjustingEvents;
    }

    /**
     * @return true, si se ignoraran los eventos de ajuste.
     * @see ListSelectionEvent#getValueIsAdjusting() 
     */
    public boolean isIgnorigAdjustingEvents() {
        return ignorigAdjustingEvents;
    }

    /**
     * Establece si se deben o no ignorar los eventos de ajuste de seleccion.
     * @see ListSelectionEvent#getValueIsAdjusting() 
     * @param ignorigAdjustingEvents 
     */
    public void setIgnorigAdjustingEvents(boolean ignorigAdjustingEvents) {
        this.ignorigAdjustingEvents = ignorigAdjustingEvents;
    }

    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (!e.getValueIsAdjusting() || !ignorigAdjustingEvents) {
            invokeMethod(e);
        }
    }
}
